﻿using Synergy.dbmodel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Synergy
{
    public partial class Form选择不良原因分类 : Form
    {
        private string 工序名称;
        private decimal 不良数量;
        BindingSource bs不良原因大类 = new BindingSource();
        BindingSource bs不良原因 = new BindingSource();
        BindingSource bs选择的不良原因 = new BindingSource();

        public List<Z_报工不良原因> z_报工不良原因List = new List<Z_报工不良原因>();
        public Form选择不良原因分类()
        {
            InitializeComponent();
        }

        public Form选择不良原因分类(string 工序名称)
        {
            InitializeComponent();
            this.工序名称 = 工序名称;
        }

        public Form选择不良原因分类(string 工序名称, decimal 不良数量)
        {
            InitializeComponent();
            this.工序名称 = 工序名称;
            this.不良数量 = 不良数量;
        }

        private void Form不良原因_Load(object sender, EventArgs e)
        {
            dataGridView不良原因分类.AutoGenerateColumns = false;
            dataGridView不良原因.AutoGenerateColumns = false;
            dataGridView选择的不良原因.AutoGenerateColumns = false;

            bs选择的不良原因.DataSource = z_报工不良原因List;
            dataGridView选择的不良原因.DataSource = bs选择的不良原因;

            List<Z_不良原因> z_s = 获取不良原因分类();
            bs不良原因大类.DataSource = z_s;
            dataGridView不良原因分类.DataSource = bs不良原因大类;
            bs不良原因大类.ResetBindings(true);
            dataGridView不良原因分类.Refresh();
 

        }

        private List<Z_不良原因> 获取不良原因()
        {
            return SqlSugarHelp.scope.Queryable<Z_不良原因>().ToList();
        }

        private List<Z_不良原因> 获取不良原因分类()
        {
            return SqlSugarHelp.scope.Queryable<Z_不良原因>().Distinct().Where(it => it.工序名称 == 工序名称)
                                        .Select(it => new Z_不良原因 { 不良原因大类名称 = it.不良原因大类名称,不良原因大类序号 = it.不良原因大类序号 } )
                                        .OrderBy(it => it.不良原因大类序号)
                                        .ToList();
        }


        private void dataGridView不良原因分类_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //如果点击的是选择
            if (e.RowIndex >= 0)
            {
                //获取不良原因大类名称
                string 不良原因大类名称 = dataGridView不良原因分类.Rows[e.RowIndex].Cells["C不良原因大类名称"].Value.ToString();
                //根据不良原因大类名称获取不良原因
                List<Z_不良原因> z_s = 获取不良原因().Where(it => it.不良原因大类名称 == 不良原因大类名称 && it.工序名称 == 工序名称).OrderBy(it => it.不良原因序号).ToList();
                bs不良原因.DataSource = z_s;
                dataGridView不良原因.DataSource = bs不良原因;
                //bs不良原因.ResetBindings(true);
                //dataGridView不良原因分类.Refresh();
            }
        }

        private void dataGridView不良原因分类_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            //如果点击的是选择
            if (e.RowIndex >= 0)
            {
                //获取不良原因大类名称
                string 不良原因大类名称 = dataGridView不良原因分类.Rows[e.RowIndex].Cells["C不良原因大类名称"].Value.ToString();
                //根据不良原因大类名称获取不良原因
                List<Z_不良原因> z_s = 获取不良原因().Where(it => it.不良原因大类名称 == 不良原因大类名称 && it.工序名称 == 工序名称).OrderBy(it => it.不良原因序号).ToList();
                bs不良原因.DataSource = z_s;
                dataGridView不良原因.DataSource = bs不良原因;
                //bs不良原因.ResetBindings(true);
                //dataGridView不良原因分类.Refresh();
            }
        }



        private void dataGridView不良原因_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //如果点击的是选择
            if (e.RowIndex >= 0)
            { 
                //获取当前行
                Z_不良原因 z = bs不良原因.Current as Z_不良原因;

                if (z_报工不良原因List.Where(it => it.不良原因名称 == z.不良原因名称 && it.不良原因序号 == z.不良原因序号).Any() == true)
                {
                    return;
                }
               
                //赋值给Z_报工不良原因
                Z_报工不良原因 z_报工不良原因 = new Z_报工不良原因();
                z_报工不良原因.guid = Guid.NewGuid();
                z_报工不良原因.不良原因大类序号 = z.不良原因大类序号;
                z_报工不良原因.不良原因大类名称 = z.不良原因大类名称;
                z_报工不良原因.不良原因序号 = z.不良原因序号;
                z_报工不良原因.不良原因名称 = z.不良原因名称;
                z_报工不良原因.质检时间 = DateTime.Now;
                z_报工不良原因.质检人 = pub.LoginUser;
                z_报工不良原因.数量 = 不良数量;
                z_报工不良原因.工序名称 = 工序名称;
                bs选择的不良原因.Add(z_报工不良原因);
                设置不良原因序号();
                bs选择的不良原因.ResetBindings(true);

            }
        }


        private void dataGridView不良原因_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            //如果点击的是选择
            if (e.RowIndex >= 0)
            {
                //获取当前行
                Z_不良原因 z = bs不良原因.Current as Z_不良原因;

                if (z_报工不良原因List.Where(it => it.不良原因名称 == z.不良原因名称).Any() == true)
                {
                    return;
                }

                //赋值给Z_报工不良原因
                Z_报工不良原因 z_报工不良原因 = new Z_报工不良原因();
                z_报工不良原因.guid = Guid.NewGuid();
                z_报工不良原因.不良原因大类序号 = z.不良原因大类序号;
                z_报工不良原因.不良原因大类名称 = z.不良原因大类名称;
                z_报工不良原因.不良原因序号 = z.不良原因序号;
                z_报工不良原因.不良原因名称 = z.不良原因名称;
                z_报工不良原因.质检时间 = DateTime.Now;
                z_报工不良原因.质检人 = pub.LoginUser;
                z_报工不良原因.数量 = 不良数量;
                bs选择的不良原因.Add(z_报工不良原因);
                设置不良原因序号();
                bs选择的不良原因.ResetBindings(true);

            }
        }

        private void 设置不良原因序号()
        {
            for (int i = 0; i < z_报工不良原因List.Count; i++)
            {
                z_报工不良原因List[i].序号 = (i + 1);
            }
        }

        private void button取消_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        private void button确定_Click(object sender, EventArgs e)
        {
            decimal 填入数量 = z_报工不良原因List.Sum(it => it.数量).GetValueOrDefault();
            if (z_报工不良原因List != null && z_报工不良原因List.Count > 0)
            {
                foreach (var item in z_报工不良原因List)
                {
                    if (item.数量 > 不良数量)
                    {
                        MessageBox.Show($"{item.不良原因名称}填入的不良数量{填入数量}不能大于{不良数量}");
                        return;
                    }
                }
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            
            else
            {
                MessageBox.Show("请选择不良原因");
                return;
            }
      

        }


        private void dataGridView选择的不良原因_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex == dataGridView选择的不良原因.Columns["E删除"].Index)
            {
                bs选择的不良原因.RemoveCurrent();
                设置不良原因序号();
                bs选择的不良原因.ResetBindings(true);
            }
        }


        //private void 渲染九宫格()
        //{
        //    List<Z_不良原因> z_s = 获取不良原因分类();
        //    if (z_s != null && z_s.Count > 0)
        //    {
        //        int row = 0;

        //        for (int i = 0; i < z_s.Count; i++)

        //        {

        //            if (i % 3 == 0 && i != 0)

        //            {

        //                row++;

        //            }

        //            Button btn = new Button();

        //            //控件名称

        //            btn.Name = z_s[i].不良原因大类名称+i;

        //            //控件显示文本

        //            btn.Text = z_s[i].不良原因大类名称;

        //            //控件大小

        //            btn.Size = new Size(300, 50);

        //            //控件位置【动态变化】

        //            btn.Location = new Point(25 + i % 5 * 300, 25 + row * 100);

        //            btn.Click += button1_Click;

        //            //添加到窗体

        //            this.Controls.Add(btn);

        //        }
        //    }
        //}

        //private void button1_Click(object sender, EventArgs e)
        //{
        //   //获取按钮text
        //   string btnText = ((Button)sender).Text;
        //    //根据按钮text获取不良原因
        //    Form选择不良原因 form = new Form选择不良原因();
        //    form.不良原因大类名称 = btnText;
        //    form.ShowDialog();
        //}
    }
}
